package com.yizhang.newfeatures;

import java.util.List;
import java.util.Vector;
import java.util.stream.Collector;
import java.util.stream.Stream;

/**
 * 并行流
 */
public class ParallelStream {

    public static void main(String[] args) {
        Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5, 6);
        // 自定义收集器Collector.of()
        List<Integer> collect = stream.parallel().collect(Collector.of(
                Vector::new,   // 1 创建容器
                List::add,  // 2 往容器中加入元素
                (List<Integer> list1, List<Integer> list2) -> {
                    list1.addAll(list2);
                    return list1;
                },  // 3 合并容器
                list -> list,  // 4 收尾工作  是否需要做类型转换啥的
                // 5 特性 默认不支持并发 需要收尾 保证顺序
                Collector.Characteristics.IDENTITY_FINISH,  // 不需要收尾
                Collector.Characteristics.UNORDERED,  // 不需要保证顺序
                Collector.Characteristics.CONCURRENT  // 要保证并发 需要用一个线程安全的容器来装
                // 保证并发的话就不会创建很多容器 对内存友好 但是效率要低一些
        ));
        System.out.println(collect);
    }
}
